有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何将带有模块的项目导入到另一个项目中,而不丢失封装?

我正试图建立一个小天气客户端API,将从一些网站获取一些天气。在这样做时,我希望我的项目有一个单一的入口点(称之为WeatherClient)

我将项目分为不同的包(为了简单起见,让我们假设我有两个包,一个“外部”包和一个“内部”包)

我只希望WeatherClient在外部包中,在内部包中有一个公共类(WeatherClientBuilderImplpublic builder()

我试图实现的是在导入项目时隐藏WeatherClientBuilderImpl。从我对模块的了解来看,这似乎正是它们的主要优点之一,但遗憾的是,我找不到任何关于如何实现这一点的信息

我试过几种方法:

  1. 我尝试创建了两个模块:内部模块和外部模块。我试着只导入内部文件。jar(其pom包括对模块的依赖关系)——我在这里面临的主要问题是在运行时获得ClassNotFound异常

  2. 我尝试创建一个模块,只导出外部包。这不起作用(我猜是因为“导出”导出的是模块,而不是包)。在这里,我最终能够实现任何一个类,这违背了我的目的

这是我当前的树,或多或少是我想要的(我试着用模块做一些事情,把我的WeatherClient放在一个“外部”包中,然后创建两个模块(一个用于外部,一个用于内部)

.
|-- WeatherClient.java
|-- internal
|   |-- DarkKey.java
|   |-- DarkSkyClient.java
|   |-- InvalidParametersException.java
|   |-- WeatherBuilderImpl.java
|   `-- handlers
|       |-- JsonBodyHandler.java
|       `-- JsonBodyHandlerTwo.java
`-- model
    |-- DateTimeFormatException.java
    |-- DateValidator.java
    `-- WeatherRequest.java

明确地说,我试图实现的是将这个项目导入到一个单独的项目中,这样一来,客户机只能通过使用WeatherClient类来创建


共 (0) 个答案